package com.atguigu.lease.common.minio;

import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/*
总结：
    1.springboot框架的优势是什么？
        简化整合：starter->导入场景启动器->具备了某个方向的所有依赖（自动配置类【142】）
        简化开发：springboot会自动按需将核心组件加入到ioc容器(0配置）->自动配置原理->启动类->@EnableAutoConfiguration->@Import ->ImportSelector->142
        简化配置：springboot统一将配置管理在application的文件中！！不需要我们加载可以直接读取
    2.springboot整合带有场景启动器
        2.1 导入对方场景启动器 (spring-boot-starter-xx|xx-spring-boot-starter）
        2.2 需要修改application配置参数(mybatis->username password url driver)
        2.3 直接使用核心组件即可RedisTemplate
    3，springboot整合不带场景启动器
        3.1导入对方的普通依赖（依赖所需要的依赖）
        3.2单独创建一个接收参数的Properties类+使用springboot批量读取注解@ConfigurationProperties(prefix="自己约定前缀");
        3.3单独创建一个配置类+@Bean方法将第三方组件加入到ioc容器+接收参数的配置类XxxProperties声明！@EnableConfigurationProperties(XxxProperties.class）[懒汉]
        3.4正常声明配置参数
        3.5正常使用核心组件对象
*/
@Configuration
@EnableConfigurationProperties(MinioProperties.class)  // 读取配置文件
public class MinioConfiguration {

    @Autowired
    private MinioProperties minioProperties;

    @Bean
    public MinioClient minioClient() {
        return MinioClient.builder()
                .endpoint(minioProperties.getEndpoint())
                .credentials(minioProperties.getAccessKey(), minioProperties.getSecretKey())
                .build();
    }

}
